<template>
  <div class="common-layout">
    <el-container>
      <el-header class="header-wrapped">
        <div class="header-content">
          <h3>BBR通用后台管理系统</h3>
          <span class="welcome">欢迎您的登录!</span>
        </div>
      </el-header>

      <el-main>
        <div class="login-wrapped">
          <el-card class="box-card">
            <el-tabs v-model="activeName" class="demo-tabs" :stretch='true'>
              <!-- ------------下面是登录----------------- -->
              <el-tab-pane label="登录" name="first">
                <el-form class="login-form">
                  <el-form-item label="账号">
										<el-input v-model="loginData.account" placeholder="请输入账号" />
									</el-form-item>
									<el-form-item label="密码">
										<el-input v-model="loginData.password" placeholder="请输入密码" show-password />
									</el-form-item>
                  <!-- 登录底部 -->
                  <div class="footer-wrapped">
                    <div class="forget-password">
											<span class="forget-password-button" @click="openForget">忘记密码</span>
										</div>
										<div class="footer-button">
											<el-button type="primary" @click="Login">登录</el-button>
										</div>
										<div class="footer-go-register">
											还没有账号？<span class="go-register" @click="jumpToSecond()">马上注册</span>
										</div>
                  </div>
                </el-form>
              </el-tab-pane>

              <!-- ------------下面是注册----------------- -->
              <el-tab-pane label="注册" name="second">
                <el-form class="login-form">
                  <el-form-item label="账号">
										<el-input v-model="registerData.account" placeholder="账号长度6-12位" />
									</el-form-item>
									<el-form-item label="密码">
										<el-input v-model="registerData.password" placeholder="密码需长度6-12位含字母数字" />
									</el-form-item>
									<el-form-item label="确认密码">
										<el-input v-model="registerData.nextPassword" placeholder="请再次输入密码" />
									</el-form-item>
									<div class="footer-button">
										<el-button type="primary" @click="Register">注册</el-button>
									</div>
                </el-form>
              </el-tab-pane>
            </el-tabs>
          </el-card>
        </div>
      </el-main>

      <el-footer class="footer-wrapped">
        <div class="footer-content">
          <div class="title">
            <span>开发人员: 赖锦生</span> |
            <span>联系方式: 15259603200</span> |
            <span>账号: 12345678   密码: 12345678ljs   </span>
          </div>
        </div>
      </el-footer>
    </el-container>
  </div>
  <!-- 忘记密码弹窗 -->
  <forget ref='forgetDialog'></forget>
</template>

<script lang="ts" setup>
  import { ref, reactive, onMounted } from 'vue';
  import { ElMessage } from 'element-plus';
  import forget from './components/forget_password.vue';
  import { useRouter } from 'vue-router';
  import { login, register, returnMenuList } from '@/api/login.js';
  import { useUserInfo } from '@/store/userinfor.js';  // 登录后用获取的id获取其他信息 pinia
  import { loginLog } from '@/api/log.js'; // 登录日志
  import { useMenu } from '@/store/menu.js';

  // pinia
  const store = useUserInfo()
  const menuStore = useMenu()

  // 控制卡片切换
  const activeName = ref('first')
  const router = useRouter()

  // 表单接口
  interface FormData {
    account : number | null;
    password: string; // 加密了
    nextPassword?: string;
    email?: String;
  }

  const loginData: FormData = reactive({
    account: null,
    password: ''
  })
  
  // 注册数据
  const registerData: FormData = reactive({
    account: null,
    password: '',
    nextPassword: ''
  })

  // 登录方法
  const Login = async () => {
    const res = await login(loginData)
    if(res.data.message == "登录成功！"){
      const { id, name, account, email, department } = res.data.results
      const { token } = res.data
      ElMessage({
        message: '登录成功！',
        type: 'success'
      })
      localStorage.setItem('id',id)
      localStorage.setItem('token',token)
      localStorage.setItem('name',name)
      localStorage.setItem('department',department)
      
      // 动态路由
      const routerList = await returnMenuList(id) 
      menuStore.setRouter(routerList.data)
      // console.log(router.getRoutes());

      // 登录日志
      await loginLog(account, name, email)

      store.useInfo(id)
      router.push('/home') // 跳转
      // 登录成功后清理 localStorage 中的注册账号
      // localStorage.removeItem('registeredAccount');
    }else{
      ElMessage.error("登录失败,请检查数据是否正确")
    }
  }

  // 注册方法
  const Register = async () => {
    if(registerData.password === registerData.nextPassword){
      const res = await register(registerData) 
      if(res.data.message == "注册账号成功！"){  // 要先console.log，要和message一样，注意！是英文还是中文的
        ElMessage({
          message: '注册成功！',
          type: 'success'
        })
        // localStorage.setItem('registeredAccount', String(registerData.account));
        activeName.value = 'first' // 跳到登录页面
      }else{
        ElMessage.error("注册失败,请检查数据是否正确")
      }
    }else{
      ElMessage.error('注册失败,两次密码不一致！')
    }
  }

  // 忘记密码 
  const forgetDialog = ref() 
  const openForget = () => {
		forgetDialog.value.open()
	}

  // 马上去注册
  const jumpToSecond = () => {
    activeName.value = 'second'
  }
</script>


<style lang="scss" scoped>
// 头部外壳
.header-wrapped {

  // 头部内容
  .header-content {
    width: 1200px;
    margin: 0 auto;
    display: flex;
    justify-content: space-between;
    align-items: center;

    // 欢迎语
    .welcome {
      font-size: 13px;
    }
  }
}

// 主体部分
.el-main {
  background-image: url('@/assets/zl.jpg');
  height: 600px;
  background-size: 100% 100%;
  --el-main-padding: 0;  // 去除或调整某个特定区域（ el-main 的组件或区域）的内边距

  // 登录外壳
  .login-wrapped {
    width: 1200px;
    height: 600px;
    margin: 0 auto;

    // 卡片样式
    .box-card {
      width: 350px;
      height: 375px;
      float: right;
      position: relative;
      top: 14%;

      .login-form {

        // 登录底部外壳
        .footer-wrapped {
          display: flex;
          flex-direction: column;

          .forget-password {
            display: flex;
            justify-content: flex-end;
            margin: 10px 0;

            .forget-password-button {
              font-size: 12px;
              color: #409eff;
              cursor: pointer; // 鼠标移入的效果
            }
          }


          .footer-go-register {
            font-size: 12px;
            margin: 12px 0;
            display: flex;
            justify-content: center;

            .go-register {
              font-size: 12px;
              color: #409eff;
              cursor: pointer;
            }
          }
        }

        // 底部登录按钮
        .footer-button {
          width: 100%;
          display: flex;
          justify-content: center;
        }
      }
    }
  }
}

// 底部外壳
.footer-wrapped {
  margin-top: 10px;

  // 底部内容
  .footer-content {
    width: 1200px;
    margin: 0 auto;
    display: flex;
    justify-content: center;
    align-items: center;

    // 底部介绍
    .title {
      color: #666;
    }

    span {
      color: #666;
      font-size: 12px;
    }
  }
}

// 表单边距
.el-form {
  margin-top: 30px;
}

// tabs标签
:deep(.el-tabs__item) {
  color: #333;
  font-size: 18px;
}

// 输入框高度
:deep(.el-input__inner) {
  height: 40px;
}

// 输入框标签字体高度
:deep(.el-form-item__label) {
  height: 40px;
  line-height: 40px;
}

// 登录按钮
:deep(.el-button) {
  width: 300px;
  height: 45px;
  font-size: 16px;
}
</style>